//package com.preparation.controller;
//
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.preparation.domain.Video;
//import com.preparation.dto.R;
//import com.preparation.service.IVideoService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.ResponseEntity;
//import org.springframework.validation.BindingResult;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.servlet.ServletOutputStream;
//import javax.servlet.http.HttpServletResponse;
//import javax.validation.Valid;
//import java.io.*;
//import java.nio.file.Files;
//import java.nio.file.Path;
//import java.nio.file.Paths;
//import java.util.Arrays;
//import java.util.UUID;
//
//@CrossOrigin
//@RestController
//@RequestMapping("/videos")
//public class VideoController {
//
//    @Autowired
//    private IVideoService videoService;
//
//    // 配置文件中指定的视频存储基础路径
//    @Value("${videos.path}")
//    private String basePath;
//
//    // 允许上传的视频文件格式
//    private static final String[] ALLOWED_VIDEO_FORMATS = {".mp4", ".avi", ".mkv", ".flv"};
//
//    // 文件上传大小限制（这里设置为100MB，可根据需求调整）
//    private static final long MAX_FILE_SIZE = 500 * 1024 * 1024;
//
//    // 文件上传
//    @PostMapping("/upload")
//    public ResponseEntity<R> upload(MultipartFile file) {
//        // 原始文件名
//        String originalFilename = file.getOriginalFilename();
//        // 获取文件后缀
//        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
//
//        // 检查文件格式是否允许
//        if (!Arrays.asList(ALLOWED_VIDEO_FORMATS).contains(suffix)) {
//            R r = new R(false, null, "不支持的视频文件格式");
//            return new ResponseEntity<>(r, HttpStatus.BAD_REQUEST);
//        }
//
//        // 检查文件大小是否超过限制
//        if (file.getSize() > MAX_FILE_SIZE) {
//            R r = new R(false, null, "上传的视频文件大小超过限制");
//            return new ResponseEntity<>(r, HttpStatus.PAYLOAD_TOO_LARGE);
//        }
//
//        // 使用UUID重新生成文件名
//        String fileName = UUID.randomUUID().toString() + suffix;
//
//        // 创建一个目录（如果不存在）
//        File dir = new File(basePath);
//        if (!dir.exists()) {
//            dir.mkdirs();
//        }
//
//        try {
//            // 将文件存储到指定位置
//            Path filePath = Paths.get(basePath + fileName);
//            try (FileOutputStream fos = new FileOutputStream(filePath.toFile());
//                 // 这里直接使用videoFile.getInputStream()获取输入流
//                 InputStream fis = file.getInputStream()) {
//                byte[] buffer = new byte[8192];
//                int length;
//                while ((length = fis.read(buffer))!= -1) {
//                    fos.write(buffer, 0, length);
//                }
//            }
//            R r = new R(true, fileName, "视频文件已成功上传");
//            return new ResponseEntity<>(r, HttpStatus.OK);
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//
//    // 文件下载
//    @GetMapping("/download")
//    public void download(@RequestParam("name") String name, HttpServletResponse response) {
//        try {
//            // 输入流，通过输入流读取文件内容
//            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
//            // 设置响应头，根据文件后缀确定MIME类型
//            String mimeType = Files.probeContentType(Paths.get(basePath + name));
//            response.setContentType(mimeType);
//
//            // 输出流，通过输出流将文件返回给浏览器
//            try (ServletOutputStream outputStream = response.getOutputStream()) {
//                int len = 0;
//                byte[] bytes = new byte[8192];
//                while ((len = fileInputStream.read(bytes))!= -1) {
//                    outputStream.write(bytes, 0, len);
//                    outputStream.flush();
//                }
//            }
//
//            // 关闭流
//            fileInputStream.close();
//
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    //分页查询
//    @GetMapping("/{currentPage}/{pageSize}")
//    public R getPage(@PathVariable int currentPage, @PathVariable int pageSize, Video video){
//        IPage<Video> page = videoService.getPage(currentPage, pageSize, video);
//        //如果当前要查询的页码值大于总页码值，默认查询最后一页数据
//        if(currentPage > page.getPages()){
//            page = videoService.getPage((int) page.getPages(), pageSize, video);
//        }
//        return new R(true, page);
//    }
//
//    //根据id查询
//    @GetMapping("/{id}")
//    public R getById(@PathVariable Integer id){
//        return new R(true, videoService.getById(id));
//    }
//
//    //根据id删除
//    @DeleteMapping("/{id}")
//    public R removeById(@PathVariable Integer id){
//        boolean flag = videoService.deleteById(id);
//        return new R(flag, flag ? "删除成功" : "数据同步失败，自动刷新！");
//    }
//
//    //添加
//    @PostMapping
//    public R add(@RequestBody @Valid Video video, BindingResult result){
//        R r = new R();
//        //jsr 303验证
//        if (result.hasErrors()) {
//            r.setStatus(false);
//            r.setMessage(result.getFieldError().getDefaultMessage());
//        }else {
//            boolean flag = videoService.add(video);
//            r.setStatus(flag);
//            r.setMessage(flag ? "添加成功^_^" : "添加失败，请稍后再试-_-");
//        }
//        return r;
//    }
//
//    //修改
//    @PutMapping
//    public R updateById(@RequestBody @Valid Video video, BindingResult result){
//        R r = new R();
//        //jsr 303验证
//        if (result.hasErrors()) {
//            r.setStatus(false);
//            r.setMessage(result.getFieldError().getDefaultMessage());
//        }else {
//            boolean flag = videoService.renewById(video);
//            r.setStatus(flag);
//            r.setMessage(flag ? "更新成功^_^" : "数据同步失败，自动刷新-_-");
//        }
//        return r;
//    }
//
//    //根据合集id查询所有视频
//    @GetMapping("/getBySid/{setId}")
//    public R getBySid(@PathVariable Integer setId){
//        return new R(true, videoService.getBySid(setId), "查询成功");
//    }
//
//}
